import { getServerSession } from "next-auth/next";
import { authOptions } from "../auth/[...nextauth]/route"; // 引入你的auth配置
import { NextResponse } from "next/server";
import connect from "@/utils/mongodb";
import User from "@/model/User";

export async function GET() {
  try {
    // 1. 验证用户登录状态
    const session = await getServerSession(authOptions);
    if (!session || !session.user) {
      return NextResponse.json(
        { error: "请先登录" },
        { status: 401 }
      );
    }

    // 2. 连接数据库并查询用户资料
    await connect();
    const user = await User.findOne(
      { email: session.user.email }, // 通过邮箱查询
      { password: 0 } // 排除密码字段
    );

    if (!user) {
      return NextResponse.json(
        { error: "用户不存在" },
        { status: 404 }
      );
    }

    // 3. 返回用户资料
    return NextResponse.json({
      name: user.name,
      email: user.email,
      avatar: user.avatar,
      bio: user.bio,
      createdAt: user.createdAt,
    });

  } catch (error) {
    console.error("获取资料失败:", error);
    return NextResponse.json(
      { error: "服务器错误" },
      { status: 500 }
    );
  }
}

export async function POST(request) {
  try {
    // 1. 验证登录状态
    const session = await getServerSession(authOptions);
    if (!session || !session.user) {
      return NextResponse.json(
        { error: "请先登录" },
        { status: 401 }
      );
    }

    // 2. 获取请求数据
    const { name, avatar, bio } = await request.json();
    if (!name) {
      return NextResponse.json(
        { error: "用户名不能为空" },
        { status: 400 }
      );
    }

    // 3. 连接数据库并更新资料
    await connect();
    const updatedUser = await User.findOneAndUpdate(
      { email: session.user.email }, // 查询条件
      { name, avatar, bio }, // 要更新的字段
      { new: true, runValidators: true } // 返回更新后的数据 + 启用验证
    ).select("-password"); // 排除密码

    // 4. 返回更新后的资料
    return NextResponse.json(updatedUser);

  } catch (error) {
    console.error("更新资料失败:", error);
    // 处理用户名重复的错误
    if (error.code === 11000) {
      return NextResponse.json(
        { error: "用户名已被占用" },
        { status: 400 }
      );
    }
    return NextResponse.json(
      { error: "服务器错误" },
      { status: 500 }
    );
  }
}